﻿Public Class CLabelCheckState2 : Inherits CStateBase

    ''' <summary>
    ''' 実行可能かを判断する
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function IsEnter(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CLabelCheckState.IsEnter")
        If CCommon.isInStr(task.ActionCd, "CHNG", "LABEL") Then
            Return True
        Else
            Return False
        End If
    End Function

    ''' <summary>
    ''' 実行メソッド
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExecute(ByVal task As CTaskBase) As CStateBase
        Dim nextState As CStateBase = Nothing
        Dim pdaTask As CPDATask2 = DirectCast(task, CPDATask2)
        Debug.WriteLine("CLabelCheckState.DoExecute")
        Do While task.ProcessText = ""
            '' リーダーからデータを取得する(待ち時間制限なし)
            'Debug.WriteLine(CCommon.CNS_MSG_011)
            pdaTask.WindowManager.SetMessage(CCommon.CNS_MSG_011, CCommon.COLOR_BLACK, CCommon.COLOR_GREEN)
            task.ProcessText = task.ReadTextWait(-1)
        Loop

        Select Case CBarcode.GetBarcodeType(task.ProcessText)
            Case EnumBarcodeType.EMP_CODE
                ''交代
                Dim empDAO As CEmpDAO = CEmpDAO.GetInstance()
                Dim empData As strctEmpInfo = empDAO.GetEmpInfo(task.ProcessText)
                If empData.EmpCd <> "" Then
                    pdaTask.EmpInfo.empNo = empData.EmpCd
                    pdaTask.EmpInfo.empName = empData.EmpName

                    pdaTask.WindowManager.SetEmpInfo(pdaTask.EmpInfo.empNo & ":[" & pdaTask.EmpInfo.empName & "]")
                Else
                    ''存在しない従業員エラー(既にCBarcodeでチェックしているため不要)
                End If
                task.ActionCd = "CHNG"
                task.ProcessText = ""
            Case EnumBarcodeType.OUTER_LABEL_CODE_M
                '' マツダラベルの場合
                'nextState = GetNextState(task, GetType(CLabelState))
                task.ActionCd = "LABEL-M"
            Case EnumBarcodeType.OUTER_LABEL_CODE_I
                '' INOACラベルの場合
                'nextState = GetNextState(task, GetType(CINOACLabelState))
                task.ActionCd = "LABEL-I"
            Case EnumBarcodeType.INNER_LABEL_CODE
                '' 社内ラベルの場合
                'nextState = GetNextState(task, GetType(CLabelState))
                task.ActionCd = "LABEL-IN"
            Case EnumBarcodeType.OUTER_LABEL_CODE_D
                '' ダイキョーラベルの場合
                'nextState = GetNextState(task, GetType(CLabelState))
                task.ActionCd = "LABEL-D"
            Case EnumBarcodeType.END_LABEL_CODE
                ''ラベル読込終了
                pdaTask.WindowManager.SetMessage(CCommon.CNS_MSG_037, CCommon.COLOR_BLACK, CCommon.COLOR_GREEN)

                ''読込み途中のラベル情報をセット
                If pdaTask.isInChildLabel() Then
                    ''前回のシングル構造体をLabelInfoにセット
                    If pdaTask.addLabelInfo("", "") Then
                        ''新規でシングル構造体を作成
                    End If
                Else
                    pdaTask.rollbackUniqueCd()
                End If
                pdaTask.clearUniqueCd() ''ユニークコードのクリア

                pdaTask.clrSingleLabelInfo()
                pdaTask.WindowManager.BaseRelease()
                ' ''データ送信
                'Dim Cweb As CWebManager = CWebManager.GetInstance
                'Cweb.uploadList(pdaTask.getSendActionData())
                'Debug.WriteLine("送信完了")
                If Not pdaTask.LabelInfo Is Nothing Then
                    pdaTask.C_FileCommon.AddTrxLabel(pdaTask.getActionData())
                    'pdaTask.C_FileCommon.SendTrxLabel()

                    pdaTask.C_FileCommon.AddTrxUniqueCd2(pdaTask.getSendUniqueCd())
                End If

                pdaTask.WindowManager.CloseWindow()
                'Debug.WriteLine("LOUT")
                'task.ActionCd = "LOUT"
                'task.ProcessText = ""
                'nextState = GetNextState(task, GetType(CShiporderState))
            Case Else
                '' それ以外のラベルが読まれた場合 -> エラーとする
                Dim result As String = ""
                Dim prevWindowMode As EnumWindowMode
                Do While result <> "[OK]"
                    If result = "" Then
                        pdaTask.Hardware.warning()
                        prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                        pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_014, CCommon.COLOR_WHITE, CCommon.COLOR_RED)
                        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                    End If
                    result = task.ReadTextWait(-1)
                    'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                Loop
                pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)

                'task.CommitState(Me)    '' コミットポイント作成
                task.ProcessText = ""
                task.ErrorCd = "EN"
                nextState = GetNextState(task, GetType(CErrorState2))
                Return nextState
        End Select

        nextState = GetNextState(task)
        Return nextState
    End Function

    ''' <summary>
    ''' 終了メソッド(未使用)
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExit(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CLabelCheckState.DoExit")
        Return True
    End Function


End Class
